<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="banner-heading flex_ccenter">
            <div class="heading-item">
              <h1 class="title fw700 f-42 c-fff">
                Instagram-verhaal downloaden
              </h1>
              <h2 class="sub c-fff f-18 fw400">
                Beste Instagram-verhaaldownloader gratis
              </h2>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                    type="text"
                    class="input f-18"
                    v-model="input"
                    @input="handleInput"
                    @paste="handleInput"
                    placeholder="Paste URL Instagram"
                    list="fruits"
                    name="fruit"
                  />
                  <datalist id="fruits">
                    <option value="Apple"></option>
                    <option value="Banana"></option>
                    <option value="Cherry"></option>
                  </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>Gegevens worden opgehaald. Wacht een paar seconden!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              De site kan uw link niet verwerken omdat deze privé is
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              De gegevens die u heeft ingevoerd zijn geen link. Voer hiervoor
              een geldige link in voorbeeld:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                Downloaden met app Insta Downloader
              </h3>
              <p class="f-16 c-ccc">
                Onze app biedt een snelle en eenvoudige oplossing voor het
                downloaden Instagram-video's, die video's van HD-kwaliteit
                bieden zonder watermerken.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Instagram-verhaal downloaden met Savinginsta
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta.Com is de bekendste Instagram-verhaaldownloader
              vanwege het gebruiksgemak en de mogelijkheid om Instagram van hoge
              kwaliteit te downloaden verhalen op de hoogste snelheden. Download
              Instagramverhalen naar je telefoon, pc of tablet in de hoogste
              kwaliteit via onze Instagram video-downloader rechtstreeks vanuit
              uw browser. Geen software installatie is vereist en het
              ondersteunt zowel Android als iOS.
            </p>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Waarom Savinginsta gebruiken voor Instagram-verhaaldownloads?
            </h3>
            <p class="f-16 c-ccc">
              Instagram Stories, gevuld met boeiende foto's en video's, zijn dat
              wel een aanzienlijk deel van onze digitale expressie, maar zijn
              alleen zichtbaar gedurende 24 uur. Als je graag Instagram Stories
              bekijkt en dat ook wilt download ze, Savinginsta is hier om u te
              helpen. Voer eenvoudig de Instagram Story-URL naar Savinginsta en
              download de beste Gratis Instagramverhalen.
            </p>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Hoe video Instagram-verhaal downloaden?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Stap01:</span>
                  <span class="f-16 c-000">
                    Voer de Instagram-gebruikersnaam in waarvan je het verhaal
                    wilt bekijken downloaden naar Savinginsta.App.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Stap02:</span>
                <span class="f-16 c-000">
                  Kies het verhaal dat u wilt downloaden.</span
                >
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Stap03:</span>
                <span class="f-16 c-000"
                  >Klik op 'Downloaden' om het Instagram-videoverhaal op te
                  slaan apparaat.</span
                >
              </div>
            </div>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Hoe kun je Insta Story downloaden naar je telefoon?
            </h3>
            <div class="attributes-list">
              <div class="features-title">
                Downloaden is super eenvoudig. Hier is een gedetailleerde
                handleiding:
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Open Instagram in een browser zoals Chrome, Firefox of de
                  Instagram-app.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Selecteer een verhaal dat u aantrekkelijk vindt.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Klik op de video die u wilt downloaden.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Kopieer de verhaal-URL uit de adresbalk.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Plak de gebruikersnaam in het adresvak op Savinginsta.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Druk op 'Download' om het Instagram-verhaal online te
                  downloaden.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Je gedownloade IG-verhaalfoto of -video staat nu in je map.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Hoe Instagram-verhalen en hoogtepunten online downloaden?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="f-16 c-000"
                    >Haal de link uit de Instagram Stories of kopieer de
                    gebruikersnaam van het Instagram-account dat je wilt
                    downloaden van.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Ga naar Savinginsta - Insta Story Downloader en plak het
                  verhaallink naar de werkbalk.
                </span>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Selecteer het verhaal dat op het scherm wordt weergegeven, kies het verhaal
                   die u wilt downloaden en druk op 'Download'.</span
                >
              </div>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Wat maakt Savinginsta.Com de beste download van Instagram (IG)-verhalen
               Hulpmiddel?
            </h3>
            <ul class="f-16 c-ccc">
              <li>Gebruiksvriendelijk en de snelste tool.</li>
              <li>Constante updates om de beste service te bieden.</li>
              <li>
                Helemaal gratis! Wij ondersteunen onze ontwikkeling met minimaal
                 reclame.
              </li>
            </ul>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">Hulpmiddelen</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/nl/instagram-story-download"
                      >Instagram-verhaaldownloader</nuxt-link
                    >
                  </li>
                  <li>
                    <nuxt-link to="/nl/instagram-reels-video-download"
                      >Instagram Reels-downloader</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >Tiktok-downloader</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Steun</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> Contact </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Legaal</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      Servicevoorwaarden
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> Privacybeleid </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >Wij zijn niet aangesloten bij Instagram of Meta</b
            >
            <div class="c-ccc f-16">
              © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>
    
    <script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";
export default {
  components: { pageHeader, SuccessContent },
  head: {
    htmlAttrs: {
      lang: "nl",
    },
    bodyAttrs: {
      "data-lang": "nl",
    },
    title: "Beste gratis Instagram-verhaaldownloader",
    meta: [
      { property: "og:locale", content: "nl" },
      //Page Information
      {
        name: "description",
        content:
          "Download Instagram-verhalen moeiteloos online met Savinginsta Instagram Downloader gratis. Bewaar Instagram-verhalen van hoge kwaliteit rechtstreeks op uw computer of telefoon, zonder advertenties. Geen watermerken",
      },

      //Schema.org Microdata
      {
        itemprop: "name",
        content: "Beste gratis Instagram-verhaaldownloader",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content: "Beste gratis Instagram-verhaaldownloader",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/nl/instagram-story-download" },

      {
        property: "og:description",
        content:
          "Download Instagram-verhalen moeiteloos online met Savinginsta Instagram Downloader gratis. Bewaar Instagram-verhalen van hoge kwaliteit rechtstreeks op uw computer of telefoon, zonder advertenties. Geen watermerken",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/nl/instagram-story-download" },
      {
        name: "twitter:title",
        content: "Beste gratis Instagram-verhaaldownloader",
      },
      {
        name: "twitter:description",
        content:
          "Download Instagram-verhalen moeiteloos online met Savinginsta Instagram Downloader gratis. Bewaar Instagram-verhalen van hoge kwaliteit rechtstreeks op uw computer of telefoon, zonder advertenties. Geen watermerken",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el/instagram-story-download",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
    ],
    script: [
      {
        json: {
          "@context": "http://schema.org",
          "@graph": [
            {
              "@type": "WebSite",
              name: "Savinginsta",
              alternateName: "Instagram downloader",
              url: "https://savinginsta.com",
            },
            {
              "@type": "WebPage",
              name: "Beste gratis Instagram-verhaaldownloader - Savinginsta", //title
              inLanguage: "nl", //语种
              description:
                "Download Instagram-verhalen moeiteloos online met Savinginsta Instagram Downloader gratis. Bewaar Instagram-verhalen van hoge kwaliteit rechtstreeks op uw computer of telefoon, zonder advertenties. Geen watermerken.", //元描述
              image: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg", //绝对路径
              url: "https://savinginsta.com/nl/instagram-story-download", //当前url
            },
          ],
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Wat is een Instagram-verhaaldownloader?`,
          content: `Het is een gratis tool waarmee je Instagram Stories eenvoudig en zonder registratie kunt downloaden.`,
        },
        {
          title: `Hoe video Instagram-verhaal downloaden?`,
          content: `Volg de eenvoudige instructies hierboven om snel Instagram-verhalen te downloaden bij Savinginsta.`,
        },
        {
          title: `Hoe kan ik Hoogtepunten downloaden van Instagram?`,
          content: `Om Instagram-hoogtepunten te downloaden, moet het account openbaar zijn. Voer de gebruikersnaam in op Savinginsta.app en klik op 'Downloaden'.`,
        },
        {
          title: `Wat moet ik doen als ik IG Stories anoniem wil bekijken?`,
          content: `Wij hebben een perfecte oplossing: onze anonieme Instagram Story viewer Instagram Story Viewer.`,
        },
        {
          title: `Moet je inloggen met je Instagram-account?`,
          content: `Geen login vereist. Savinginsta vraagt niet om persoonlijke informatie, waardoor veilige en anonieme downloads worden gegarandeerd.`,
        },
        {
          title: `Kan ik video's rechtstreeks op Instagram opslaan?`,
          content: `Ja, maar je moet wachten tot de video is afgelopen.`,
        },
        {
          title: `Ondersteunt de website downloaden van Insta voor computers?`,
          content: `Absoluut, u kunt video's, foto's, verhalen en meer downloaden vanaf een pc. Zie ook: Downloaden vanaf Insta op pc.`,
        },
        {
          title: `Kun je Instagram Story downloaden voor Android?`,
          content: `Ja, kopieer de berichtlink, plak deze in het vak van onze website en sla deze op. Voor meer info: Downloaden van Insta op Android.`,
        },
        {
          title: `Hoe Story Instagram-video's en foto's op de iPhone downloaden?`,
          content: `Het is net zo eenvoudig als op Android. Bekijk de gids voor het downloaden van verhaal Instagram voor iOS.`,
        },
        {
          title: `Waar kan ik opgeslagen verhaalvideo's op een computer vinden?`,
          content: `Controleer de downloadgeschiedenis van uw browser met Ctrl+J voor Windows en Shift+Command+J voor Mac.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "story",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "story",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "story",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "story",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "story",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "story",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },
    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "story",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "story",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
  },
};
</script>
    <style lang="scss" scoped>
 @import "@/static/style/story.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
    